Spusteni externiho exe z aplikace v Delphi

Otázka od: Jiri Brothanek

12. 12. 2002 9:46

Ahoj,

omlouvam se za zacatecnicky dotaz.
Potrebuji spustit z aplikace napsane v D5 jine exe - konzolovou aplikaci.
Takze v podstate v programu spustit neco jako :

    program.exe -parametr1 -parametr2

Aby to nebylo tak jednoduche, tak bych potreboval nejak zachytit vystup,
ktery program.exe vypisuje na konzolu. Formulace :

    program.exe -parametr1 -parametr2 >vystup.txt

nefunguje. Tvdosijne vypisuje do okna a vystup.txt zustane prazdny.

Ve starem Turbo Pascalu bych to resil prikazem EXEC z unity DOS, ale to v
Delphi neni a nic podobneho nemohu najit.

Za kazdy podnet, pripominku, dekuji.

Jirka.



Odpovedá: ing. Jan Fiala

12. 12. 2002 9:50

V Delphi je prikaz WinExec, ale to neresi tvuj problem se zachycenim
vystupu.
Nekde jsem videl unitu DosCommand, ktera toto resila, vcetne cekani na
ukonceni, moznosti i vkladat text do konzole a odpovidat tak na dotazy
programu.
Zkus se podivat na klasickych www.torry.net apod.

--
ing. Jan Fiala
mailto:jan.fiala@iol.cz

12.12.2002 Jiri Brothanek:
> Ahoj,

> omlouvam se za zacatecnicky dotaz.
> Potrebuji spustit z aplikace napsane v D5 jine exe - konzolovou aplikaci.
> Takze v podstate v programu spustit neco jako :

> program.exe -parametr1 -parametr2

> Aby to nebylo tak jednoduche, tak bych potreboval nejak zachytit vystup,
> ktery program.exe vypisuje na konzolu. Formulace :

> program.exe -parametr1 -parametr2 >vystup.txt

> nefunguje. Tvdosijne vypisuje do okna a vystup.txt zustane prazdny.

> Ve starem Turbo Pascalu bych to resil prikazem EXEC z unity DOS, ale to v
> Delphi neni a nic podobneho nemohu najit.

> Za kazdy podnet, pripominku, dekuji.

> Jirka.

Odpovedá: Ondrej Kelle

12. 12. 2002 10:45

> Potrebuji spustit z aplikace napsane v D5 jine exe -
> konzolovou aplikaci. Takze v podstate v programu
> spustit neco jako :
>
> program.exe -parametr1 -parametr2
>
> Aby to nebylo tak jednoduche, tak bych potreboval nejak
> zachytit vystup, ktery program.exe vypisuje na konzolu.

Jeden priklad najdes tu:

http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=14692

Hladal som len zbezne, mozno je podobnych prikladov na CC aj viac.

> program.exe -parametr1 -parametr2 >vystup.txt
>
> nefunguje. Tvdosijne vypisuje do okna a vystup.txt zustane prazdny.

Obavam sa, ze ak toto nefunguje, potom dana konzolova aplikacia nepouziva
stdout. Na vypis moze pouzit aj stderr alebo priamy zapis do screen buffrov.
V tom pripade bude odchytavanie toho vystupu asi problematicke.

HTH
TOndrej

Odpovedá: Jiri Brothanek

12. 12. 2002 17:03

Ondrej Kelle wrote:

> Jeden priklad najdes tu:
>
> http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=14692

Diky za priklad, je zde rozveden CreateProcess a externi exe spustim.

> ... dana konzolova aplikacia nepouziva
> stdout. Na vypis moze pouzit aj stderr alebo priamy zapis do screen
buffrov.
> V tom pripade bude odchytavanie toho vystupu asi problematicke.

To opravdu nejde.

Nevi nekdo, jak to zachytit ?

Jirka

Odpovedá: Jiri Brothanek

12. 12. 2002 17:37

ing. Jan Fiala wrote :

> V Delphi je prikaz WinExec, ale to neresi tvuj problem se zachycenim

Diky, z dokumentace jsem pochopil, ze CreateProcess vyuziva WinExec a
spousteni aplikace jsem rozchodil.
Pokud pouziji program, ktery vypisuje standardne do okna, tak vystup
zachytim. Program, ktery ale v DOS okne nezabere na :

program.exe >vystup.txt

mi ale zachytit nejde.

Zajimalo by mne ale, zda z principu jde nejak zachytit vystup, kdyz pise
jinam nez na stdout nebo zda lze napsat konzolovou aplikaci tak, ze to je
znemozneno.

Jirka


From: "ing. Jan Fiala" <jan.fiala@iol.cz>
To: <delphi-l@clexpert.cz>


> V Delphi je prikaz WinExec, ale to neresi tvuj problem se zachycenim
> vystupu.
> Nekde jsem videl unitu DosCommand, ktera toto resila, vcetne cekani na
> ukonceni, moznosti i vkladat text do konzole a odpovidat tak na dotazy
> programu.
> Zkus se podivat na klasickych www.torry.net apod.
>
> --
> ing. Jan Fiala


Odpovedá: Dalibor Toman

12. 12. 2002 17:51



> ing. Jan Fiala wrote :
>
> > V Delphi je prikaz WinExec, ale to neresi tvuj problem se
zachycenim
>
> Diky, z dokumentace jsem pochopil, ze CreateProcess vyuziva WinExec
a
> spousteni aplikace jsem rozchodil.
> Pokud pouziji program, ktery vypisuje standardne do okna, tak vystup
> zachytim. Program, ktery ale v DOS okne nezabere na :
>
> program.exe >vystup.txt
>
> mi ale zachytit nejde.
>
> Zajimalo by mne ale, zda z principu jde nejak zachytit vystup, kdyz
pise
> jinam nez na stdout nebo zda lze napsat konzolovou aplikaci tak, ze
to je
> znemozneno.
>
Pokud aplikace primo pise do videopameti pak muzes zkusit
CreateConsoleScreenBuffe
ReadConsoleOutput

atd. Vice viz msdn.microsoft.com


D. Toman

Odpovedá: ing. Jan Fiala

12. 12. 2002 19:38

12.12.2002 Jiri Brothanek:
program.exe >vystup.txt

> mi ale zachytit nejde.

> Zajimalo by mne ale, zda z principu jde nejak zachytit vystup, kdyz pise
> jinam nez na stdout nebo zda lze napsat konzolovou aplikaci tak, ze to je
> znemozneno.

Zkousel jsi najit tu komponentu DosCommand ?
Dal jsem ji na http://www.volny.cz/jan.fiala

Uspesne ji pouzivam v PSpadu a bez problemu zachyti i vystup
obrazovky, ktery pomoci presmerovani zachytit nejde

--
Jan Fiala
mailto:jan.fiala@iol.cz

Odpovedá: Jiri Brothanek

12. 12. 2002 20:07

ing. Jan Fiala wrote :

> Zkousel jsi najit tu komponentu DosCommand ?
> Dal jsem ji na http://www.volny.cz/jan.fiala

Diky, ted jsem si ji ztahl z www.torry.net DosCommand 2.0 a zitra to
odzkousim. Na tvuj web se podivam.

Jiri Brothanek

----- Original Message -----
From: "ing. Jan Fiala" <jan.fiala@iol.cz>
To: <delphi-l@clexpert.cz>
Sent: Thursday, December 12, 2002 7:13 PM
Subject: Re: Spusteni externiho exe z aplikace v Delphi


> 12.12.2002 Jiri Brothanek:
> program.exe >vystup.txt
>
> > mi ale zachytit nejde.
>
> > Zajimalo by mne ale, zda z principu jde nejak zachytit vystup, kdyz pise
> > jinam nez na stdout nebo zda lze napsat konzolovou aplikaci tak, ze to
je
> > znemozneno.
>
> Zkousel jsi najit tu komponentu DosCommand ?
> Dal jsem ji na http://www.volny.cz/jan.fiala
>
> Uspesne ji pouzivam v PSpadu a bez problemu zachyti i vystup
> obrazovky, ktery pomoci presmerovani zachytit nejde
>
> --
> Jan Fiala
> mailto:jan.fiala@iol.cz
>
>

Odpovedá: Jiri Brothanek

13. 12. 2002 20:44

ing. Jan Fiala wrote :

> Zkousel jsi najit tu komponentu DosCommand ?
> Dal jsem ji na http://www.volny.cz/jan.fiala

Diky za komponentu. Vystup mi to ale nedela c:\out.txt ma delku 0. Jedu to
pod Win2000.
Nemohu prijit na to, co delam spatne.

Jiri Brothanek jiri.brothanek@seznam.cz


Cast vypisu :

procedure TForm1.Button1Click(Sender: TObject);
var
    sl :TStringList;
begin
  DosCommand1.CommandLine := 'c:\my.bat';
  DosCommand1.Execute;
  sl := DosCommand1.Lines;
  sl.SaveToFile('c:\out.txt');
  sl.Free;
end;

Obsah c:\my.bat :
@echo off
echo 1
echo 2
echo 3
echo 4

Odpovedá: Jiri Brothanek

14. 12. 2002 0:06

ing. Jan Fiala wrote :
> Zkousel jsi najit tu komponentu DosCommand ?

Opravuji svuj minuly mail (nesmyslne pouziti TStringList).

Problem mam uz tady :

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   DosCommand1.CommandLine := 'c:\my.bat';
   DosCommand1.Execute;
 end;

Vyvola vzdy OnError.

Jiri Brothanek

Odpovedá: ing. Jan Fiala

14. 12. 2002 10:32

13.12.2002 Jiri Brothanek:
> Opravuji svuj minuly mail (nesmyslne pouziti TStringList).

> Problem mam uz tady :

> procedure TForm1.Button1Click(Sender: TObject);
> begin
> DosCommand1.CommandLine := 'c:\my.bat';
> DosCommand1.Execute;
> end;

> Vyvola vzdy OnError.


A co ti k tomu mam rict, kdyz nevim, co mas v te davce ?
Mas v ni prikazy i s cestou ?
Pokud to spoustit ze sveho programu, jsi nastaveny nekde. A kdyz mas v
davce prime spusteni neceho bez cesty...

V havicce unity mas priklady.
Zkus vyzkouset tohle:

s := 'C:\My.BAT';
DosComm.CurDir := ExtractFilePath(s);
DosComm.CommandLine := s;
DosComm.Execute;

Cteni vystupu na obrazovku se provadi v udalosti DosComm.OnNewLine,
takze by tam nemelo byt zadne presmerovani >neco.txt

--
Jan Fiala
mailto:jan.fiala@iol.cz

Odpovedá: Jiri Brothanek

14. 12. 2002 17:02

ing. Jan Fiala wrote :

> Zkus vyzkouset tohle:
>
> s := 'C:\My.BAT';
> DosComm.CurDir := ExtractFilePath(s);
> DosComm.CommandLine := s;
> DosComm.Execute;

Uz mi to jede. Nenastavoval jsem DosComm.CurDir . Chybne jsem predpokladal,
ze to dela za mne. Diky za radu a celkove za pomoc. Nic z toho, co jsem si
stahl, mi ten vystup nezachytilo jenom DosCommand.
Ta komponenta je fakt skvela.


Jiri Brothanek
jiri.brothanek@seznam.cz

Odpovedá: miro mrazik

14. 12. 2002 18:35

Ahoj mam konzolovu aplikaciu, ktoru ked spustim tak sa mi zobrazi dosovske
okno a v nom bezia percenta. Bolo by mozne pomocou tejto komponenty
zachytiti aj vypisovanie priebehu operacie v percentach?

Miro
----- Original Message -----
From: "ing. Jan Fiala" <jan.fiala@iol.cz>
To: <delphi-l@clexpert.cz>
Sent: Saturday, December 14, 2002 7:02 AM
Subject: Re: Spusteni externiho exe z aplikace v Delphi


> 13.12.2002 Jiri Brothanek:
> > Opravuji svuj minuly mail (nesmyslne pouziti TStringList).
>
> > Problem mam uz tady :
>
> > procedure TForm1.Button1Click(Sender: TObject);
> > begin
> > DosCommand1.CommandLine := 'c:\my.bat';
> > DosCommand1.Execute;
> > end;
>
> > Vyvola vzdy OnError.
>
>
> A co ti k tomu mam rict, kdyz nevim, co mas v te davce ?
> Mas v ni prikazy i s cestou ?
> Pokud to spoustit ze sveho programu, jsi nastaveny nekde. A kdyz mas v
> davce prime spusteni neceho bez cesty...
>
> V havicce unity mas priklady.
> Zkus vyzkouset tohle:
>
> s := 'C:\My.BAT';
> DosComm.CurDir := ExtractFilePath(s);
> DosComm.CommandLine := s;
> DosComm.Execute;
>
> Cteni vystupu na obrazovku se provadi v udalosti DosComm.OnNewLine,
> takze by tam nemelo byt zadne presmerovani >neco.txt
>
> --
> Jan Fiala
> mailto:jan.fiala@iol.cz
>

Odpovedá: ing. Jan Fiala

14. 12. 2002 19:39

Neni nic jednodussiho nez to vyzkouset.
Co jsi cekal za odpoved ? Ja takovu aplikaci nemam, takze to
nevyzkousim  

--
Jan Fiala
mailto:jan.fiala@iol.cz

14.12.2002 miro mrazik:
> Ahoj mam konzolovu aplikaciu, ktoru ked spustim tak sa mi zobrazi dosovske
> okno a v nom bezia percenta. Bolo by mozne pomocou tejto komponenty
> zachytiti aj vypisovanie priebehu operacie v percentach?